Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for uperf driver #118

Merged
merged 1 commit into from
Dec 5, 2023

Conversation

venkataanil
Copy link
Contributor

@venkataanil venkataanil commented Nov 17, 2023

Similar to iperf, user can run uperf along with netperf using "--uperf" option

benchmark-wrapper is used a reference for parsing

  1. user options and creating uperf config file
    (input to uperf client command)
  2. uperf output

uperf driver supports only TCP_STREAM, UPD_STREAM, TCP_RR, and UDP_RR tests.
For each test in full-run.yaml, Uperf driver will create a uperf profile file inside the client pod and uses it to run the test. Parallelism is implemented using uperf's nproc option

uperf server can't be run using "&&" option in the same container inside server pod i.e
"netserver && iperf3 -s -p 22865 && uperf -s -v -P 30000 && sleep 10000000" So we are creating a separate container in server pod for uperf server.

Type of change

  • Refactor
  • New feature
  • Bug fix
  • Optimization
  • Documentation Update

Description

Related Tickets & Documents

  • Related Issue #
  • Closes #

Checklist before requesting a review

  • I have performed a self-review of my code.
  • If it is a core feature, I have added thorough tests.

Testing

  • Please describe the System Under Test.
  • Please provide detailed steps to perform tests related to this code change.
  • How were the fix/results from this change verified? Please provide relevant screenshots or results.

@venkataanil venkataanil force-pushed the uperf-driver branch 2 times, most recently from d7fa2f7 to 9f779b2 Compare November 17, 2023 10:59
Copy link
Member

@jtaleric jtaleric left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great work Anil! I will plan to test this -- just ran out of time this Friday! Great stuff!!

pkg/k8s/kubernetes.go Show resolved Hide resolved
pkg/uperf/uperf.go Outdated Show resolved Hide resolved
pkg/uperf/uperf.go Outdated Show resolved Hide resolved
Copy link
Contributor Author

@venkataanil venkataanil left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Joe for reviw. Kindly see my reply comments

pkg/uperf/uperf.go Outdated Show resolved Hide resolved
pkg/uperf/uperf.go Outdated Show resolved Hide resolved
Copy link

@mukrishn mukrishn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good addition! lgtm except the service port range.

pkg/k8s/kubernetes.go Show resolved Hide resolved
@venkataanil venkataanil force-pushed the uperf-driver branch 2 times, most recently from 6a75d27 to 0f274b0 Compare November 23, 2023 04:20
@SachinNinganure
Copy link
Contributor

Hello @venkataanil
Can we also have the driver details on RR output

@venkataanil venkataanil force-pushed the uperf-driver branch 2 times, most recently from da37b95 to 72f6a25 Compare November 23, 2023 07:29
@venkataanil
Copy link
Contributor Author

Hello @venkataanil Can we also have the driver details on RR output

done, thanks

@rsevilla87
Copy link
Member

rsevilla87 commented Nov 29, 2023

"netserver && iperf3 -s -p 22865 && uperf -s -v -P 30000 && sleep 10000000" So we are creating a separate container in server pod for uperf server.

Why?, because iperf and uperf server mode run in foreground?

You can always use & to run them in background with something like:

$ (netserver & iperf3 -s -p 22865 & uperf -s -v -P 30000) && sleep inf
$ ps -ef | egrep "uperf|netserver|iperf"
egrep: warning: egrep is obsolescent; using grep -E
rsevilla  839931  839929  0 22:57 pts/3    00:00:00 iperf3 -s -p 22865
rsevilla  839932  839929  0 22:57 pts/3    00:00:00 uperf -s -v -P 30000
rsevilla  839933    3241  0 22:57 ?        00:00:00 netserver

pkg/uperf/uperf.go Outdated Show resolved Hide resolved
@venkataanil
Copy link
Contributor Author

venkataanil commented Dec 1, 2023

Thanks, I tried only in foreground . Moving them to containers is a good option. Lets continue it.

Similar to iperf, user can run uperf along with netperf using
"--uperf" option

benchmark-wrapper is used a reference for parsing
1) user options and creating uperf config file
  (input to uperf client command)
2) uperf output

uperf driver supports only TCP_STREAM, UPD_STREAM, TCP_RR, and
UDP_RR tests.
For each test in full-run.yaml, Uperf driver will create a uperf
profile file inside the client pod and uses it to run the test.
Parallelism is implemented using uperf's nproc option

uperf server can't be run using "&&" option in the same container
inside server pod i.e
"netserver && iperf3 -s -p 22865 && uperf -s -v -P 30000 && sleep 10000000"
So we are creating a separate containers for netperf, iperf and uperf
inside server pod.

Add driver details in RR P99 Latency results
@rsevilla87
Copy link
Member

rsevilla87 commented Dec 1, 2023

Thanks, I tried only in foreground . Moving them to containers is a good option. Lets continue it.

I'm not sure what changes you've added in the last commit but I still see multiple containers for the servers

Copy link
Member

@jtaleric jtaleric left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested locally. Nice work!

@jtaleric
Copy link
Member

jtaleric commented Dec 4, 2023

Thanks, I tried only in foreground . Moving them to containers is a good option. Lets continue it.

I'm not sure what changes you've added in the last commit but I still see multiple containers for the servers

@rsevilla87 I would like to get 1 more +1 -- let me know if you feel there is anything else for @venkataanil to address.

@jtaleric
Copy link
Member

jtaleric commented Dec 4, 2023

Does uperf not provide re-transmission info?

+---------------------+---------+------------+-------------+--------------+---------+--------------+-----------+----------+---------+------------+
|        TYPE         | DRIVER  |  SCENARIO  | PARALLELISM | HOST NETWORK | SERVICE | MESSAGE SIZE | SAME NODE | DURATION | SAMPLES | AVG VALUE  |
+---------------------+---------+------------+-------------+--------------+---------+--------------+-----------+----------+---------+------------+
| TCP Retransmissions | netperf | TCP_STREAM | 1           | false        | false   | 1024         | false     | 30       | 3       | 38.333333  |
| TCP Retransmissions | uperf   | TCP_STREAM | 1           | false        | false   | 1024         | false     | 30       | 3       | 0.000000   |
| TCP Retransmissions | netperf | TCP_STREAM | 2           | false        | false   | 1024         | false     | 30       | 3       | 47.000000  |
| TCP Retransmissions | uperf   | TCP_STREAM | 2           | false        | false   | 1024         | false     | 30       | 3       | 0.000000   |
| TCP Retransmissions | netperf | TCP_STREAM | 1           | false        | false   | 8192         | false     | 30       | 3       | 40.333333  |
| TCP Retransmissions | uperf   | TCP_STREAM | 1           | false        | false   | 8192         | false     | 30       | 3       | 0.000000   |
| TCP Retransmissions | netperf | TCP_STREAM | 2           | false        | false   | 8192         | false     | 30       | 3       | 170.000000 |
| TCP Retransmissions | uperf   | TCP_STREAM | 2           | false        | false   | 8192         | false     | 30       | 3       | 0.000000   |
| UDP Loss Percent    | netperf | UDP_STREAM | 1           | false        | false   | 1024         | false     | 30       | 3       | 2.435977   |
| UDP Loss Percent    | uperf   | UDP_STREAM | 1           | false        | false   | 1024         | false     | 30       | 3       | 0.000000   |
+---------------------+---------+------------+-------------+--------------+---------+--------------+-----------+----------+---------+------------+

@venkataanil
Copy link
Contributor Author

Thanks, I tried only in foreground . Moving them to containers is a good option. Lets continue it.

I'm not sure what changes you've added in the last commit but I still see multiple containers for the servers

Lets go with multiple containers approach only. So I retained multiple containers code in this patch.

@venkataanil
Copy link
Contributor Author

Does uperf not provide re-transmission info?

+---------------------+---------+------------+-------------+--------------+---------+--------------+-----------+----------+---------+------------+
|        TYPE         | DRIVER  |  SCENARIO  | PARALLELISM | HOST NETWORK | SERVICE | MESSAGE SIZE | SAME NODE | DURATION | SAMPLES | AVG VALUE  |
+---------------------+---------+------------+-------------+--------------+---------+--------------+-----------+----------+---------+------------+
| TCP Retransmissions | netperf | TCP_STREAM | 1           | false        | false   | 1024         | false     | 30       | 3       | 38.333333  |
| TCP Retransmissions | uperf   | TCP_STREAM | 1           | false        | false   | 1024         | false     | 30       | 3       | 0.000000   |
| TCP Retransmissions | netperf | TCP_STREAM | 2           | false        | false   | 1024         | false     | 30       | 3       | 47.000000  |
| TCP Retransmissions | uperf   | TCP_STREAM | 2           | false        | false   | 1024         | false     | 30       | 3       | 0.000000   |
| TCP Retransmissions | netperf | TCP_STREAM | 1           | false        | false   | 8192         | false     | 30       | 3       | 40.333333  |
| TCP Retransmissions | uperf   | TCP_STREAM | 1           | false        | false   | 8192         | false     | 30       | 3       | 0.000000   |
| TCP Retransmissions | netperf | TCP_STREAM | 2           | false        | false   | 8192         | false     | 30       | 3       | 170.000000 |
| TCP Retransmissions | uperf   | TCP_STREAM | 2           | false        | false   | 8192         | false     | 30       | 3       | 0.000000   |
| UDP Loss Percent    | netperf | UDP_STREAM | 1           | false        | false   | 1024         | false     | 30       | 3       | 2.435977   |
| UDP Loss Percent    | uperf   | UDP_STREAM | 1           | false        | false   | 1024         | false     | 30       | 3       | 0.000000   |
+---------------------+---------+------------+-------------+--------------+---------+--------------+-----------+----------+---------+------------+

I used benchmark-wrapper and benchmark-operator as base for running uperf and parsing results. uperf wrapper https://github.com/cloud-bulldozer/benchmark-wrapper/blob/master/snafu/benchmarks/uperf/uperf.py was not having info related to re-transimmion, so I couldn't add it.
I will push another PR for re-transmition and additional changes.

@rsevilla87 rsevilla87 self-requested a review December 5, 2023 10:34
Copy link
Member

@rsevilla87 rsevilla87 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@jtaleric jtaleric merged commit 2d00766 into cloud-bulldozer:main Dec 5, 2023
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants